ThingNN : Multi object detection and classify
The thingnn module provides thing detection and recognition function.
User can use the following code to import the thingnn module.
var thingnn = require('thingnn');
Support
The following shows thingnn module APIs available for each permissions.
| User Mode | Privilege Mode | |
|---|---|---|
| thingnn.detect | ● | ● | 
| thingnn.identify | ● | ● | 
thingnn Object
thingnn.detect(videoBuf, attribute)
- videoBuf{Buffer} Video buffer.
- attribute{Object} Video attribute.
- Returns: {Array} Thing info objects array which detectd.
Detect thing infos in given video buffer.
The video attribute attribute object contains the following members:
- width{Integer} Video width.
- height{Integer} Video height.
- pixelFormat{Integer} Pixel format.
pixelFormat is a integer, can be:
| Value | Description | 
|---|---|
| thingnn.PIX_FMT_BGR24 | BGR24 pixel format. | 
| thingnn.PIX_FMT_RGB2BGR24 | RGB24 to BGR24 pixel format. | 
| thingnn.PIX_FMT_GRAY2BGR24 | Grayscale to BGR24 pixel format. | 
| thingnn.PIX_FMT_RGBA2BGR24 | RGBA to BGR24 pixel format. | 
The returned thing info object contains the following members:
- className{String} Thing class name.
- prob{Number} Probability- 0.0 ~ 1.0.
- x0{Integer} x position of upper left corner.
- y0{Integer} y position of upper left corner.
- x1{Integer} x position of lower right corner.
- y1{Integer} y position of lower right corner.
className is a string, can be: background, aeroplane, bicycle, bird, boat, bottle, bus, car, cat, chair, cow, diningtable, dog, horse, motorbike, person, pottedplant, sheep, sofa, train, tvmonitor.
thingnn.identify(videoBuf, attribute, thingInfo)
- videoBuf{Buffer} Video buffer.
- attribute{Object} Video attribute.
- thingInfo{Object} Thing info object.
- Returns: {String} Thing name.
Identify the name of given thing info.
Example
This example show how to detect and identify thing.
var MediaDecoder = require('mediadecoder');
var iosched = require('iosched');
var thingnn = require('thingnn');
var netcam = new MediaDecoder().open('rtsp://admin:admin@10.4.0.12');
netcam.destVideoFormat({width: 640, height: 360, fps: 1, pixelFormat: MediaDecoder.PIX_FMT_BGR24, noDrop: false, disable: false});
netcam.destAudioFormat({disable: true});
netcam.previewFormat({enable: true, fb: 0, fps: 25, fullscreen: false});
var ol = netcam.overlay();
var quited = false;
netcam.on('video', (video) => {
  var buf = new Buffer(video.arrayBuffer);
  var thingInfo = thingnn.detect(buf, {width: 640, height: 360, pixelFormat: thingnn.PIX_FMT_BGR24});
  ol.clear();
  if (thingInfo.length) {
    ol.font(ol.F8X12);
    for (var i = 0; i < thingInfo.length; i++) {
      var thingName = thingnn.identify(buf, {width: 640, height: 360, pixelFormat: thingnn.PIX_FMT_BGR24}, thingInfo[i]);
      ol.text(thingInfo[i].x0, thingInfo[i].y0, thingInfo[i].className, MediaDecoder.C_RED);
      ol.text(thingInfo[i].x0, thingInfo[i].y0 + 20, thingName, MediaDecoder.C_RED);
      ol.rect(thingInfo[i].x0, thingInfo[i].y0, thingInfo[i].x1, thingInfo[i].y1, MediaDecoder.C_RED, 2, 0, false);
    }
  }
});
netcam.on('eof', () => {
  quited = true;
});
netcam.start();
while (!quited) {
  iosched.poll(); // Event poll.
}
netcam.close();




 陕公网安备61019002002605号
陕公网安备61019002002605号